#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <unistd.h>

/*
 * 从 I2C 设备读取寄存器值
 * @param fd: I2C 设备文件句柄
 * @param reg_addr: 要读取的寄存器地址
 */
void ft5x06_read_reg(int fd, unsigned char reg_addr) {
    unsigned char rd_data[1];
    rd_data[0] = reg_addr;
    write(fd, rd_data, 1);
    read(fd, rd_data, 1);
    printf("reg value is %x\n", rd_data[0]);
}

/*
 * 向 I2C 设备写入寄存器值
 * @param fd: I2C 设备文件句柄
 * @param reg_addr: 要写入的寄存器地址
 * @param data: 要写入的数据
 */
void ft5x06_write_reg(int fd, unsigned char reg_addr, unsigned char data) {
    unsigned char wr_data[2];
    wr_data[0] = reg_addr;
    wr_data[1] = data;
    write(fd, wr_data, 2);
}

int main(int argc, char *argv[]) {
    int fd;

    // 打开 I2C 设备文件
    fd = open("/dev/i2c-1", O_RDWR);
    if (fd < 0) {
        printf("open error\n");
        return fd;
    }

    // 设置从设备地址为 0x38
    ioctl(fd, I2C_SLAVE_FORCE, 0x38);

    // 向寄存器 0x80 写入数据 0x66
    ft5x06_write_reg(fd, 0x80, 0x66);

    // 读取寄存器 0x80 的值
    ft5x06_read_reg(fd, 0x80);

    return 0;
}
